package leetcode_300;

/**
 *@author 周杨
 *GameOfLife_289 细胞游戏 每次根据身边的细胞决定存活
 *describe:暴力解 AC 7% 水题
 *2018年6月29日 上午9:50:38
 */
public class GameOfLife_289 {
	int[][] board;
	/**
	 * describe: 规定2为0被污染 3是1被污染
	 * 2018年6月29日 上午9:27:31
	 * @param board
	 * void
	 */
	public void gameOfLife(int[][] board) {
        if(board.length==0||board[0].length==0)
        	return ;
        this.board=board;
        for(int i=0;i<board.length;++i)
        	for(int j=0;j<board[0].length;++j) {
        		if(board[i][j]==0) {
        			if(detect(i, j)==3)
        				board[i][j]=2;
        		}
        		else {
        			int res=detect(i, j);
        			if(res<2||res>3)
        				board[i][j]=3;
        		}
        	}
        for(int i=0;i<board.length;++i)
        	for(int j=0;j<board[0].length;++j) {
        		if(board[i][j]==2)
        			board[i][j]=1;
        		else if(board[i][j]==3)
        			board[i][j]=0;
        	}
    }
	
	/**
	 * describe:返回1的数量
	 * 2018年6月29日 上午9:29:24
	 */
	private int detect(int i,int j) {
		int res=0;
		boolean upFlag=false,downFlag=false,leftFlag=false,rightFlag=false;
		if(i-1>=0)
			upFlag=true;
		if(i+1<this.board.length)
			downFlag=true;
		if(j-1>=0)
			leftFlag=true;
		if(j+1<this.board[0].length)
			rightFlag=true;
		if(upFlag) {
			if(leftFlag)
				if(board[i-1][j-1]==1||board[i-1][j-1]==3)
					++res;
			if(rightFlag)
				if(board[i-1][j+1]==1||board[i-1][j+1]==3)
					++res;
			if(board[i-1][j]==1||board[i-1][j]==3)
				++res;
		}
		if(downFlag) {
			if(leftFlag)
				if(board[i+1][j-1]==1||board[i+1][j-1]==3)
					++res;
			if(rightFlag)
				if(board[i+1][j+1]==1||board[i+1][j+1]==3)
					++res;
			if(board[i+1][j]==1||board[i+1][j]==3)
				++res;
		}
		if(leftFlag)
			if(board[i][j-1]==1||board[i][j-1]==3)
				++res;
		if(rightFlag)
			if(board[i][j+1]==1||board[i][j+1]==3)
				++res;
		return res;
	}
}
